//
//  TTRTCAgoraConfig.swift
//  TTLive
//
//  Created by Toj on 1/26/21.
//  声网配置文件, 详情请看 TTRTCAgoraConfig.h
//  *** TTRTCAgoraConfig.h/ TTRTCAgoraConfig.swift 同步
//

import Foundation

#if canImport(Cocoa)
@_exported import AgoraRtcEngineKit
#endif

#if canImport(UIKit)
@_exported import AgoraRtcEngineKit
#endif


internal struct TTRTCAgoraConfig {
    struct Audio { }
    struct Video { }
    struct ScreenCapture { }
    struct Parameters { }
    
    // 日志输出等级: AgoraLogFilterInfo = 0x000f
    static let logFilter: UInt = 0x000f

    // 频道的使用场景: 主播. 0:通信(默认), 1:直播, 2:游戏(不推荐使用)
    static let channelProfile: AgoraChannelProfile = .liveBroadcasting

    // 用户角色: 主播. 1:主播, 2:观众(默认)
    static let clientRole: AgoraClientRole = .broadcaster
}

extension TTRTCAgoraConfig.Audio {
    
    // 音频采集音量, 取值范围为[0,400].
    static let recording = 100
    
    // 音频属性
    // 指定 48 KHz采样率, 音乐编码, 单声道, 编码码率最大值为 96 Kbps
    static let profile: AgoraAudioProfile = .musicHighQuality
    // 音频应用场景
    // 教育场景，适用于需要高流畅度和稳定性的场景
    static let scenario: AgoraAudioScenario = .education
    
    // 音量提示间隔, 单位: 毫秒.
    static let indication = 100
    // 音量提示灵敏度
    static let smooth = 3
    // 是否开启人声检测
    static let report_vad = true
    
    // 播放远端音量, 取值范围为[0, 400]
    static let playback = 350
}

extension TTRTCAgoraConfig.Video {
    // 视频尺寸等比缩放
    static let renderMode: AgoraVideoRenderMode = .fit
    
    // 镜像模式: AgoraVideoMirrorModeAuto = 0 (默认)
    static let mirrorMode: AgoraVideoMirrorMode = .auto
    
    // 分辨率
    static let resolution: CGSize = CGSize(width: 424, height: 240)
    
    // 15fps 视频帧率
    static let rate: AgoraVideoFrameRate = .fps15
    
    // Kbps 视频的码率
    static let bitrate: NSInteger = 220
    
    // 显示方向
    static let orientationMode: AgoraVideoOutputOrientationMode = .adaptative
    
    // 带宽受限时的视频编码降级偏好
    static let degradation: AgoraDegradationPreference = .maintainFramerate
    
    // 视频属性枚举值 profile = { resolution + rate + bitrate }
    static let profile: AgoraVideoProfile = .landscape240P_4
    
    // 默认远端接收小流
    static let streamType: AgoraVideoStreamType = .low
}

extension TTRTCAgoraConfig.ScreenCapture {
    // 共享视频的帧率
    static let freq = 15
    // 共享视频的码率, 默认值为 0, 表示由 SDK 根据当前共享的分辨率计算出一个合理的值
    static let bitRate = 0
    // 全屏: 宽或高设为 0
    static let rect: CGRect = .zero
    
    #if canImport(Cocoa)
    static var fullParameters = parameters(dimensions: .zero)
    
    static func parameters(dimensions: CGSize) -> AgoraScreenCaptureParameters {
        let parameters = AgoraScreenCaptureParameters()
        // 屏幕共享视频发送的最大像素值
        parameters.dimensions = dimensions
        // 共享视频的帧率
        parameters.frameRate = freq
        // 共享视频的帧率
        parameters.frameRate = bitRate
        // 是否采集鼠标用于屏幕共享
        parameters.captureMouseCursor = true
        // 调用 startScreenCaptureByWindowId 方法共享窗口时, 是否将该窗口前置
        // parameters.windowFocus = true
        return parameters
    }
    #endif
}

extension TTRTCAgoraConfig.Parameters {
    // 小流参数配置
    static let low = "{\"che.video.lowBitRateStreamParameter\":{\"width\":320,\"height\":180,\"frameRate\":20,\"bitRate\":140}}"
}
